﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DXW.Ungvien
{
    using DXW.Extends;
    using DevExpress.XtraEditors;

    public partial class FrmUngvien : DXW.FrmInput
    {
        public FrmUngvien()
        {
            InitializeComponent();
            _bll = new WS.Catalog.CatalogSoapClient();
        }

        WS.Ungvien.UngvienSoapClient _bllUngvien = new WS.Ungvien.UngvienSoapClient();
        WS.Chuyenmon.ChuyenmonSoapClient _bllChuyenmon = new WS.Chuyenmon.ChuyenmonSoapClient();
        Guid Id = Guid.Empty;
        string TabActive = "tabThongtinCanhan";
        DataTable dtChuyenmon;

        #region CreateDataTable
        private DataTable dtUngvien()
        {
            return _bllUngvien.SelectUngvien();
        }

        private DataTable dtChuyenmon_Ungvien(Guid Id)
        {
            return _bllChuyenmon.SelectChuyenmon_Ungvien_Id(Id);
        }

        private DataTable dtVitri()
        {
            return _bll.SelectLoai("Vitri");
        }

        private DataTable dtNoicap()
        {
            return _bll.SelectLoai("Noicap");
        }

        private DataTable dtQuoctich()
        {
            return _bll.SelectLoai("Quoctich");
        }

        private DataTable dtTruong()
        {
            return _bll.SelectLoai("Truong");
        }

        private DataTable dtChuyennganh()
        {
            return _bll.SelectLoai("Chuyennganh");
        }

        private DataTable dtBangcap()
        {
            return _bll.SelectLoai("Bangcap");
        }

        private DataTable CreateNewDataTableUngvien()
        {
            DataTable dt1 = dtUngvien();
            DataTable dt2 = dtVitri();
            DataTable dt3 = dtNoicap();
            DataTable dt4 = dtQuoctich();
            dt1.Columns.Add("Vitri");
            dt1.Columns.Add("Noicap");
            dt1.Columns.Add("Quoctich");
            for (int i = 0; i < dt1.Rows.Count; i++)
            {
                string VitriId = dt1.Rows[i]["Vitri_Id"].ToString();
                for (int j = 0; j < dt2.Rows.Count; j++)
                {
                    if (VitriId == dt2.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Vitri"] = dt2.Rows[j]["Ten"];
                        break;
                    }
                }

                string NoicapId = dt1.Rows[i]["Noicap_Id"].ToString();
                for (int j = 0; j < dt3.Rows.Count; j++)
                {
                    if (NoicapId == dt3.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Noicap"] = dt3.Rows[j]["Ten"];
                        break;
                    }
                }

                string QuoctichId = dt1.Rows[i]["Quoctich_Id"].ToString();
                for (int j = 0; j < dt4.Rows.Count; j++)
                {
                    if (QuoctichId == dt4.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Quoctich"] = dt4.Rows[j]["Ten"];
                        break;
                    }
                }
            }
            return dt1;
        }

        private DataTable CreateNewDataTableChuyenmon_Ungvien(Guid Id)
        {
            DataTable dt1 = dtChuyenmon_Ungvien(Id);
            DataTable dt2 = dtTruong();
            DataTable dt3 = dtChuyennganh();
            DataTable dt4 = dtBangcap();
            dt1.Columns.Add("Truong");
            dt1.Columns.Add("Chuyennganh");
            dt1.Columns.Add("bangcap");
            for (int i = 0; i < dt1.Rows.Count; i++)
            {
                string TruongId = dt1.Rows[i]["Truong_Id"].ToString();
                for (int j = 0; j < dt2.Rows.Count; j++)
                {
                    if (TruongId == dt2.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Truong"] = dt2.Rows[j]["Ten"];
                        break;
                    }
                }

                string ChuyennganhId = dt1.Rows[i]["Chuyennganh_Id"].ToString();
                for (int j = 0; j < dt3.Rows.Count; j++)
                {
                    if (ChuyennganhId == dt3.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Chuyennganh"] = dt3.Rows[j]["Ten"];
                        break;
                    }
                }

                string BangcapId = dt1.Rows[i]["Bangcap_Id"].ToString();
                for (int j = 0; j < dt4.Rows.Count; j++)
                {
                    if (BangcapId == dt4.Rows[j]["Id"].ToString())
                    {
                        dt1.Rows[i]["Bangcap"] = dt4.Rows[j]["Ten"];
                        break;
                    }
                }
            }
            return dt1;
        }

        #endregion

        #region LoadDataToLookup
        private void LoadDsDanhmuc_Ungvien()
        {
            DataTable dtDsVitri = dtVitri();
            dtDsVitri.Columns[3].ColumnName = "Vitri";
            lokVitri.Properties.DataSource = dtDsVitri;
            lokVitri.Properties.DisplayMember = "Vitri";
            lokVitri.Properties.ValueMember = "Id";

            DataTable dtDsNoicap = dtNoicap();
            dtDsNoicap.Columns[3].ColumnName = "Noicap";
            lokNoicap.Properties.DataSource = dtDsNoicap;
            lokNoicap.Properties.DisplayMember = "Noicap";
            lokNoicap.Properties.ValueMember = "Id";

            DataTable dtDsQuoctich = dtQuoctich();
            dtDsQuoctich.Columns[3].ColumnName = "Quoctich";
            lokQuoctich.Properties.DataSource = dtDsQuoctich;
            lokQuoctich.Properties.DisplayMember = "Quoctich";
            lokQuoctich.Properties.ValueMember = "Id";
        }

        private void LoadDsDanhmuc_Chuyenmon()
        {
            DataTable dtDsTruong = dtTruong();
            dtDsTruong.Columns[3].ColumnName = "Truong";
            lokTruong.Properties.DataSource = dtDsTruong;
            lokTruong.Properties.DisplayMember = "Truong";
            lokTruong.Properties.ValueMember = "Id";

            DataTable dtDsChuyengnganh = dtChuyennganh();
            dtDsChuyengnganh.Columns[3].ColumnName = "Chuyennganh";
            lokChuyennganh.Properties.DataSource = dtDsChuyengnganh;
            lokChuyennganh.Properties.DisplayMember = "Chuyennganh";
            lokChuyennganh.Properties.ValueMember = "Id";

            DataTable dtDsBangcap = dtChuyennganh();
            dtDsBangcap.Columns[3].ColumnName = "Bangcap";
            lokBangcap.Properties.DataSource = dtDsBangcap;
            lokBangcap.Properties.DisplayMember = "Bangcap";
            lokBangcap.Properties.ValueMember = "Id";
        }

        #endregion

        #region LoadDataToGrid
        private void LoadData_Ungvien()
        {
            _dtb = CreateNewDataTableUngvien();
            gcUngvien.DataSource = _dtb;
        }
        //Còn nhiều grid khác trong các tab
        #endregion

        protected override void LoadData()
        {
            LoadData_Ungvien();

            base.LoadData();
        }

        private void gvUngvien_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                Id = (Guid)gvUngvien.GetFocusedRowCellValue("Id");
                if (Id != Guid.Empty)
                {
                    dtChuyenmon = CreateNewDataTableChuyenmon_Ungvien(Id);
                    gcChuyenmon.DataSource = dtChuyenmon;
                    ClearDataBindings_Chuyenmon();
                    DataBinding_Chuyenmon();
                    ReadOnlyControl_Chuyenmon();
                }
                else
                {
                    ClearDataBindings_Chuyenmon();
                    gcChuyenmon.DataSource = null;
                    ResetInput_Chuyenmon();
                }

                radHonnhan.SelectedIndex = GetSetRadioGroup.Check(gvUngvien.GetFocusedRowCellValue("Honnhan").ToString());
            }
            catch (Exception)
            {
            }
        }

        protected override void PerformRefresh()
        {
            LoadDsDanhmuc_Ungvien();
            LoadDsDanhmuc_Chuyenmon();
            LoadData();
            ClearDataBindings();
            DataBindingControl();
            ReadonlyControl_Ungvien();

            //ReadOnlyControl();

            base.PerformRefresh();
        }

        protected override void SetNullPrompt()
        {

            base.SetNullPrompt();
        }

        protected override void PerformEdit()
        {
            if (Id == Guid.Empty)
            {
                XtraMessageBox.Show(STR_CHOICE_E,
                    Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            base.PerformEdit();
        }

        protected override void PerformDelete()
        {
            //var tmpId = gvDanhsach.GetFocusedRowCellValue("Id");
            //if (tmpId == null)
            //{
            //    XtraMessageBox.Show(STR_CHOICE,
            //        Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            //    return;
            //}

            //var text = gvDanhsach.GetFocusedRowCellValue("Ten");
            //var id = (Guid)tmpId;

            //if (id == new Guid())
            //    XtraMessageBox.Show(STR_SELECT.ToUpper(), STR_DELETE.ToUpper(),
            //    MessageBoxButtons.OK, MessageBoxIcon.Information);
            //else
            //{
            //    var cfm = String.Format(STR_CONFIRM, text);
            //    var oki = XtraMessageBox.Show(cfm.ToUpper(), STR_DELETE.ToUpper(), MessageBoxButtons.OKCancel);

            //    if (oki == DialogResult.OK)
            //        if (_bll.DeleteDanhmuc(id) != null) PerformRefresh();
            //        else XtraMessageBox.Show(STR_UNDELETE.ToUpper(), STR_DELETE.ToUpper(),
            //            MessageBoxButtons.OK, MessageBoxIcon.Warning);
            //}

            base.PerformDelete();
        }

        protected override void PerformSave()
        {
            //if (!ValidInput())
            //{
            //    XtraMessageBox.Show("Cần nhập dữ liệu cho tên bằng cấp trước", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //    return;
            //}
            //switch (_state)
            //{
            //    case State.Add:
            //        if (InsertObject())
            //        {
            //            ResetInput(); LoadData();
            //            XtraMessageBox.Show("Lưu thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //        }
            //        break;

            //    case State.Edit:
            //        if (UpdateObject())
            //        {
            //            ChangeStatus(); ReadOnlyControl();
            //            PerformRefresh();
            //            XtraMessageBox.Show("Lưu thành công!", "Lưu", MessageBoxButtons.OK, MessageBoxIcon.Information);
            //        }
            //        break;

            //    default:
            //        break;
            //}
            base.PerformSave();
        }

        #region Binding
        private void ClearDataBindings_Chuyenmon()
        {
            lokTruong.DataBindings.Clear();
            lokChuyennganh.DataBindings.Clear();
            txtThoigian.DataBindings.Clear();
            lokBangcap.DataBindings.Clear();
        }

        private void DataBinding_Chuyenmon()
        {
            lokTruong.DataBindings.Add("EditValue", dtChuyenmon, ".Truong_Id");
            lokChuyennganh.DataBindings.Add("EditValue", dtChuyenmon, ".Chuyennganh_Id");
            txtThoigian.DataBindings.Add("EditValue", dtChuyenmon, ".Thoigian");
            lokBangcap.DataBindings.Add("EditValue", dtChuyenmon, ".Bangcap_Id");
        }

        protected override void ClearDataBindings()
        {
            txtMa.DataBindings.Clear();
            lokVitri.DataBindings.Clear();
            txtMucluong.DataBindings.Clear();
            dtpNgay_Lamviec.DataBindings.Clear();
            txtMuctieu.DataBindings.Clear();
            txtTen.DataBindings.Clear();
            dtpNgaysinh.DataBindings.Clear();
            txtNoisinh.DataBindings.Clear();

            radGioitinh.SelectedIndex = 0;

            txtCMND.DataBindings.Clear();
            dtpNgaycap.DataBindings.Clear();
            lokNoicap.DataBindings.Clear();
            lokQuoctich.DataBindings.Clear();
            txtDiachi_lienhe.DataBindings.Clear();
            txtDiachi_Thuongtru.DataBindings.Clear();
            txtTel.DataBindings.Clear();
            txtHP.DataBindings.Clear();
            txtEmail.DataBindings.Clear();
            txtChieucao.DataBindings.Clear();
            txtCannang.DataBindings.Clear();

            radHonnhan.SelectedIndex = 0;

            meoSothich.DataBindings.Clear();
            meoDiemmanh.DataBindings.Clear();
            meoDiemyeu.DataBindings.Clear();

            base.ClearDataBindings();
        }

        protected override void DataBindingControl()
        {
            txtMa.DataBindings.Add("EditValue", _dtb, ".Ma");

            lokVitri.DataBindings.Add("EditValue", _dtb, ".Vitri_Id");

            txtMucluong.DataBindings.Add("EditValue", _dtb, ".Mucluong");
            dtpNgay_Lamviec.DataBindings.Add("EditValue", _dtb, ".Ngay_Lamviec");
            txtMuctieu.DataBindings.Add("EditValue", _dtb, ".Muctieu");
            txtTen.DataBindings.Add("EditValue", _dtb, ".Ten");
            dtpNgaysinh.DataBindings.Add("EditValue", _dtb, ".Ngaysinh");
            txtNoisinh.DataBindings.Add("EditValue", _dtb, ".Noisinh");


            txtCMND.DataBindings.Add("EditValue", _dtb, ".CMND");
            dtpNgaycap.DataBindings.Add("EditValue", _dtb, ".Ngaycap");

            lokNoicap.DataBindings.Add("EditValue", _dtb, ".Noicap_Id");

            lokQuoctich.DataBindings.Add("EditValue", _dtb, ".Quoctich_Id");

            txtDiachi_lienhe.DataBindings.Add("EditValue", _dtb, ".Diachi_lienhe");
            txtDiachi_Thuongtru.DataBindings.Add("EditValue", _dtb, ".Diachi_Thuongtru");
            txtTel.DataBindings.Add("EditValue", _dtb, ".Tel");
            txtHP.DataBindings.Add("EditValue", _dtb, ".HP");
            txtEmail.DataBindings.Add("EditValue", _dtb, ".Email");
            txtChieucao.DataBindings.Add("EditValue", _dtb, ".Chieucao");
            txtCannang.DataBindings.Add("EditValue", _dtb, ".Cannang");

            meoSothich.DataBindings.Add("EditValue", _dtb, ".Sothich");
            meoDiemmanh.DataBindings.Add("EditValue", _dtb, ".Diemmanh");
            meoDiemyeu.DataBindings.Add("EditValue", _dtb, ".Diemyeu");

            base.DataBindingControl();
        }

        #endregion

        #region ResetInput
        private void ResetInput_Ungvien()
        {
            lokVitri.Text = null;
            lokVitri.Properties.NullText = "Chọn vị trí";
            txtMucluong.Text = null;
            txtMucluong.Properties.NullText = "Nhập mức lương";
            dtpNgay_Lamviec.Text = null;
            dtpNgay_Lamviec.Properties.NullText = "Chọn ngày";
            txtMuctieu.Text = null;
            txtMuctieu.Properties.NullText = "Nhập mục tiêu";
            txtTen.Text = null;
            txtTen.Properties.NullText = "Nhập tên ứng viên";
            dtpNgaysinh.Text = null;
            dtpNgaysinh.Properties.NullText = "Chọn ngày";
            txtNoisinh.Text = null;
            txtNoisinh.Properties.NullText = "Nhập nơi sinh";
            radGioitinh.SelectedIndex = 0;
            txtCMND.Text = null;
            txtCMND.Properties.NullText = "Nhập CMND";
            dtpNgaycap.Text = null;
            dtpNgaycap.Properties.NullText = "Chọn ngày";
            lokNoicap.Text = null;
            lokNoicap.Properties.NullText = "Chọn nơi cấp";
            lokQuoctich.Text = null;
            lokQuoctich.Properties.NullText = "Chọn quốc tịch";
            txtDiachi_lienhe.Text = null;
            txtDiachi_lienhe.Properties.NullText = "Nhập địa chỉ liên hệ";
            txtDiachi_Thuongtru.Text = null;
            txtDiachi_Thuongtru.Properties.NullText = "Nhập địa chỉ thường trú";
            txtTen.Text = null;
            txtTen.Properties.NullText = "Nhập số điện thoại";
            txtHP.Text = null;
            txtHP.Properties.NullText = "Nhập số điện thoại nhà";
            txtEmail.Text = null;
            txtEmail.Properties.NullText = "Nhập Email";
            txtChieucao.Text = null;
            txtChieucao.Properties.NullText = "Nhập chiều cao (cm)";
            txtCannang.Text = null;
            txtCannang.Properties.NullText = "Nhập cân nặng (kg)";
            meoSothich.Text = null;
            meoSothich.Properties.NullText = "Nhập sỡ thích";
            meoDiemmanh.Text = null;
            meoDiemmanh.Properties.NullText = "Nhập điểm mạnh";
            meoDiemyeu.Text = null;
            meoDiemyeu.Properties.NullText = "Nhập điểm yếu";
        }

        private void ResetInput_Chuyenmon()
        {
            lokTruong.Text = null;
            lokChuyennganh.Text = null;
            txtThoigian.Text = null;
            lokBangcap.Text = null;

            lokTruong.Properties.NullText = "Chọn trường";
            lokChuyennganh.Properties.NullText = "Chọn chuyên ngành";
            txtThoigian.Properties.NullText = "Nhập thời gian";
            lokBangcap.Properties.NullText = "chọn bằng cấp";
        }
        #endregion

        #region ReadonlyControl
        private void ReadonlyControl_Ungvien(bool isReadOnly = true)
        {
            txtMa.Properties.ReadOnly = isReadOnly;
            lokVitri.Properties.ReadOnly = isReadOnly;
            txtMucluong.Properties.ReadOnly = isReadOnly;
            dtpNgay_Lamviec.Properties.ReadOnly = isReadOnly;
            txtMuctieu.Properties.ReadOnly = isReadOnly;
            txtTen.Properties.ReadOnly = isReadOnly;
            dtpNgaysinh.Properties.ReadOnly = isReadOnly;
            txtNoisinh.Properties.ReadOnly = isReadOnly;

            radGioitinh.Properties.ReadOnly = isReadOnly;

            txtCMND.Properties.ReadOnly = isReadOnly;
            dtpNgaycap.Properties.ReadOnly = isReadOnly;
            lokNoicap.Properties.ReadOnly = isReadOnly;
            lokQuoctich.Properties.ReadOnly = isReadOnly;
            txtDiachi_lienhe.Properties.ReadOnly = isReadOnly;
            txtDiachi_Thuongtru.Properties.ReadOnly = isReadOnly;
            txtTel.Properties.ReadOnly = isReadOnly;
            txtHP.Properties.ReadOnly = isReadOnly;
            txtEmail.Properties.ReadOnly = isReadOnly;
            txtChieucao.Properties.ReadOnly = isReadOnly;
            txtCannang.Properties.ReadOnly = isReadOnly;

            radHonnhan.Properties.ReadOnly = isReadOnly;

            meoSothich.Properties.ReadOnly = isReadOnly;
            meoDiemmanh.Properties.ReadOnly = isReadOnly;
            meoDiemyeu.Properties.ReadOnly = isReadOnly;

            gcUngvien.Enabled = isReadOnly;
        }

        private void ReadOnlyControl_Chuyenmon(bool isReadOnly = true)
        {
            lokTruong.Properties.ReadOnly = isReadOnly;
            lokChuyennganh.Properties.ReadOnly = isReadOnly;
            txtThoigian.Properties.ReadOnly = isReadOnly;
            lokBangcap.Properties.ReadOnly = isReadOnly;

            gcChuyenmon.Enabled = isReadOnly;
        }
        #endregion
        //protected override void ResetInput(bool isReadOnly = true)
        //{
        //    //txtTen.Text = null;
        //    //txtGhichu.Text = null;

        //    base.ResetInput();
        //}

        protected override void ReadOnlyControl(bool isReadOnly = true)
        {
            //txtTen.Properties.ReadOnly = isReadOnly;
            //txtGhichu.Properties.ReadOnly = isReadOnly;

            //gcDanhsach.Enabled = isReadOnly;

            base.ReadOnlyControl(isReadOnly);
        }

        //protected override bool UpdateObject()
        //{
        //try
        //{
        //    if (!ValidInput()) return false;

        //    var id = (Guid)gvDanhsach.GetFocusedRowCellValue("Id");

        //    var o = new WS.Catalog.Danhmuc()
        //    {
        //        Id = id,
        //        Loai = _name,
        //        Ten = txtTen.Text,
        //        Ghichu = txtGhichu.Text
        //    };

        //    _bll.UpdateDanhmuc(o);
        //    return true;
        //}
        //catch { return false; }
        //}

        //protected override bool InsertObject()
        //{
        //try
        //{
        //    if (!ValidInput()) return false;

        //    var o = new WS.Catalog.Danhmuc()
        //    {
        //        Id = Guid.NewGuid(),
        //        Id_Parent = Guid.Empty,
        //        Loai = _name,
        //        Ten = txtTen.Text,
        //        Ghichu = txtGhichu.Text
        //    };

        //    _bll.InsertDanhmuc(o);
        //    return true;
        //}
        //catch { return false; }
        //}


        protected override bool ValidInput()
        {
            //if (txtTen.Text.Trim() == "") return false;
            return true;
        }

        #region Constants
        private const string STR_TITLE = "Bằng cấp";
        private const string STR_ADD = "Thêm " + STR_TITLE;
        private const string STR_EDIT = "Sửa " + STR_TITLE;
        private const string STR_DELETE = "Xoá " + STR_TITLE;

        private const string STR_SELECT = "Chọn dữ liệu!";
        private const string STR_CONFIRM = "Có xoá bằng cấp '{0}' không?";
        private const string STR_UNDELETE = "Không xoá được!\nDữ liệu đang được sử dụng.";
        private const string STR_DUPLICATE = "Vị trí này có rồi";

        //private const string STR_AGE = "Phải 18 tuổi trở lên!";
        //private const string STR_PASS = "Mật khẩu 6 kí tự trở lên!";

        private const string STR_CHOICE = "CHỌN DÒNG CẦN XOÁ\n\rHOẶC KHÔNG ĐƯỢC CHỌN NHÓM ĐỂ XOÁ";
        private const string STR_CHOICE_E = "CHỌN DÒNG CẦN SỬA\n\r HOẶC KHÔNG ĐƯỢC CHỌN NHÓM ĐỂ SỬA";
        #endregion

        private void tabMain_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
        {
            switch (e.Page.Name)
            {
                case "tabDaotaoChuyenmon":
                    TabActive = "tabDaotaoChuyenmon";
                    break;
                case "tabKhoaHuanluyen":
                    TabActive = "tabKhoaHuanluyen";
                    break;
                case "tabNgonngu":
                    TabActive = "tabNgonngu";
                    break;
                case "tabVitinh":
                    TabActive = "tabVitinh";
                    break;
                case "tabQuatrinhLamviec":
                    TabActive = "tabQuatrinhLamviec";
                    break;
                case "tabThongtinBosung":
                    TabActive = "tabThongtinBosung";
                    break;
                case "tabThamchieu":
                    TabActive = "tabThamchieu";
                    break;
                default:
                    TabActive = "tabThongtinCanhan";
                    break;
            }
        }
    }
}